package toubiao.domain.po.manage;

import java.util.Set;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.OneToMany;
import javax.persistence.PrimaryKeyJoinColumn;
import javax.persistence.Table;

import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.CascadeType;
import org.hibernate.annotations.DynamicUpdate;

    /**
    * @ClassName: PoJspPage
    * @Description: jsp或subJsp页面,主要为了 承载 该页面上的资源信息，以便管理
    * @author 宁少林
    * @date 2016年8月27日
    *
    */
@Entity
@Table(name = "jspPage") //对应保存的数据库名称
@PrimaryKeyJoinColumn(name="id")
@DynamicUpdate(true)	
//在Hibernate中可以利用@DynamicInsert和@DynamicUpdate生成动态SQL语句，即在插入和修改数据的时候,语句中只包括要插入或者修改的字段。
//当然还有其他的方式达到这种效果，比如使用session为我们提供的merge方法，也是可以的。
public class PoJspPage  {

	private int id;
	
	private String name;
	    /**
	    * @Fields type : 
	    * 1.jsp
	    * 2.subJsp
	    */
	private String type;
	
	    /**
	    * @Fields jspPath : jsp 文件的abs path
	    */
	private String jspPath;
	
	    /**
	    * @Fields groupName : 分组名：项目、合同、人员...
	    */
	private String groupName;
	
	
	    /**
	    * @Fields resourceSet : 该页面上的资源，
	    * 注意：不包括引入该jsp的servlet path，因为引入该jsp 的servletPath可能有多个，在初始化资源配置时，代码难以处理
	    */
	private Set<PoResource> resourceSet;
	
	
	    /**
	    * @Fields servletPathSet : 引入该jsp的servlet path
	    * 和 resource 是多对多的关系，一个serlvetPath可能对应多个jsp，反之亦然
	    * 暂时不使用该属性
	    */
//	private Set<PoResource> servletPathSet;
	
	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	@Column(name = "ID")
	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getJspPath() {
		return jspPath;
	}

	public void setJspPath(String jspPath) {
		this.jspPath = jspPath;
	}


	public String getGroupName() {
		return groupName;
	}

	public void setGroupName(String groupName) {
		this.groupName = groupName;
	}

	

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getType() {
		return type;
	}

	public void setType(String type) {
		this.type = type;
	}

	@ManyToMany(fetch = FetchType.LAZY)
	@JoinTable(name = "jspPage_resource", joinColumns = { @JoinColumn(name = "jspPage_id", nullable = false) }, inverseJoinColumns = { @JoinColumn(name = "resource_id", nullable = false) })
	/*@OrderBy("name ASC")*/
	@Cascade({ CascadeType.SAVE_UPDATE })
	public Set<PoResource> getResourceSet() {
		return resourceSet;
	}

	public void setResourceSet(Set<PoResource> resourceSet) {
		this.resourceSet = resourceSet;
	}
	

	
	
}
